package 力扣;

/**
 给你一个升序排列的整数数组 nums ，和一个整数 target 。

 假设按照升序排序的数组在预先未知的某个点上进行了旋转。（例如，数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ）。

 请你在数组中搜索 target ，如果数组中存在这个目标值，则返回它的索引，否则返回 -1 。

  
 示例 1：

 输入：nums = [4,5,6,7,0,1,2], target = 0
 输出：4
 示例 2：

 输入：nums = [4,5,6,7,0,1,2], target = 3
 输出：-1
 示例 3：
 输入：nums = [1], target = 0
 输出：-1
 */

public class _33搜索旋转排序数组 {


    public int search(int[] nums, int target) {

        int left=0;
        int right=nums.length-1;
        while(left<=right){
            int mid = (left+right)>>1;
            if( nums[mid] == target ) return mid;
            if( nums[mid] >=nums[left] ){ //左边有序
                if( target>= nums[left] && target < nums[mid]){ //判断target是否在有序数组里
                    right = mid - 1;
                }else{
                    left = mid+1;
                }
            }else{ //右边有序
                if( target<= nums[right] && target > nums[mid]){ //判断target是否在有序数组里
                    left = mid+1;
                }else{
                    right = mid-1;
                }
            }

        }
        return -1;

    }
}
